/**
 * echarts层级查找方法
 *
 * @desc echarts基于Canvas，纯Javascript图表库，提供直观，生动，可交互，可个性化定制的数据统计图表。
 * @author Kener (@Kener-林峰, kener.linfeng@gmail.com)
 *
 */


var zrUtil = require('zrender/tool/util');
/**
     * 获取嵌套选项的基础方法
     * 返回optionTarget中位于optionLocation上的值，如果没有定义，则返回undefined
     */
function query(optionTarget, optionLocation) {
    if (typeof optionTarget == 'undefined') {
        return;
    }
    if (!optionLocation) {
        return optionTarget;
    }
    optionLocation = optionLocation.split('.');
    var length = optionLocation.length;
    var curIdx = 0;
    while (curIdx < length) {
        optionTarget = optionTarget[optionLocation[curIdx]];
        if (typeof optionTarget == 'undefined') {
            return;
        }
        curIdx++;
    }
    return optionTarget;
}
/**
     * 获取多级控制嵌套属性的基础方法
     * 返回ctrList中优先级最高（最靠前）的非undefined属性，ctrList中均无定义则返回undefined
     */
function deepQuery(ctrList, optionLocation) {
    var finalOption;
    for (var i = 0, l = ctrList.length; i < l; i++) {
        finalOption = query(ctrList[i], optionLocation);
        if (typeof finalOption != 'undefined') {
            return finalOption;
        }
    }
}
/**
     * 获取多级控制嵌套属性的基础方法
     * 根据ctrList中优先级合并产出目标属性
     */
function deepMerge(ctrList, optionLocation) {
    var finalOption;
    var len = ctrList.length;
    while (len--) {
        var tempOption = query(ctrList[len], optionLocation);
        if (typeof tempOption != 'undefined') {
            if (typeof finalOption == 'undefined') {
                finalOption = zrUtil.clone(tempOption);
            } else {
                zrUtil.merge(finalOption, tempOption, true);
            }
        }
    }
    return finalOption;
}
module.exports = {
    query: query,
    deepQuery: deepQuery,
    deepMerge: deepMerge
} || module.exports;;